import { NestFactory } from '@nestjs/core';
import { ValidationPipe, VersioningType } from '@nestjs/common';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
  app.enableCors();
  // 设置接口前缀
  app.setGlobalPrefix(process.env.API_PREFIX, { exclude: ['index', 'editor'] });

  app.useStaticAssets(join(__dirname, '../', 'static'), {
    prefix: '/static',
  });
  app.useStaticAssets(join(__dirname, '../', 'public'),{
    prefix: '/public',   //设置虚拟路径
 });
  app.setBaseViewsDir(join(__dirname, '../', 'views')); // 放视图的文件
  app.setViewEngine('ejs');
  // app.setViewEngine('hbs');

  // app.useGlobalPipes(
  //   new ValidationPipe({
  //     // 完整配置文档参见：https://docs.nestjs.cn/9/techniques?id=%e9%aa%8c%e8%af%81
  //     skipNullProperties: true,
  //     stopAtFirstError: true,
  //     transform: true,
  //   }),
  // );

  // 添加全局数据响应拦截器
  // app.useGlobalInterceptors(new ResponseInterceptor(), new LoggingInterceptor());

  // // 版本号配置
  // app.enableVersioning({
  //   type: VersioningType.URI,
  //   defaultVersion: '1',
  // });

  // 接口文档配置
  const isTest = process.env.NODE_ENV === 'test';
  if (isTest) {
    const options = new DocumentBuilder()
      .setTitle('Demo Onlyoffice 接口文档')
      .setVersion('1.0.0')
      .addTag('Onlyoffice')
      .addTag('Document')
      .build();
    const document = SwaggerModule.createDocument(app, options);
    SwaggerModule.setup('docs', app, document);
  }
  // knexConnect.schema.createTableIfNotExists('test',(table)=>{
  //   table.increments('id').notNullable().primary()
  //   table.string('name').unique()
  // })

  //  启动服务
  await app.listen(process.env.PORT);
}
bootstrap();
